<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>语法</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.constants.html">常量</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.constants.predefined.html">魔术常量</a></div>
 <div class="up"><a href="language.constants.html">常量</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="language.constants.syntax" class="sect1">
   <h2 class="title">语法</h2>
   <p class="simpara">
    可以用 <span class="function"><a href="function.define.html" class="function">define()</a></span> 函数来定义常量，在
    PHP 5.3.0 以后，可以使用 <em>const</em> 
    关键字在类定义之外定义常量。一个常量一旦被定义，就不能再改变或者取消定义。
   </p>
   <p class="simpara">
    常量只能包含标量数据（<span class="type"><a href="language.types.boolean.html" class="type boolean">boolean</a></span>，<span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span>，<span class="type"><a href="language.types.float.html" class="type float">float</a></span>
	和 <span class="type"><a href="language.types.string.html" class="type string">string</a></span>）。可以定义 <span class="type"><a href="language.types.resource.html" class="type resource">resource</a></span> 常量，但应尽量避免，因为会造成不可预料的结果。
   </p>
   <p class="simpara">
    可以简单的通过指定其名字来取得常量的值，与变量不同，<em class="emphasis">不应该</em>在常量前面加上
     <em>$</em> 符号。如果常量名是动态的，也可以用函数 
     <span class="function"><a href="function.constant.html" class="function">constant()</a></span> 来获取常量的值。用 
     <span class="function"><a href="function.get-defined-constants.html" class="function">get_defined_constants()</a></span> 可以获得所有已定义的常量列表。
   </p>
   <blockquote class="note"><p><strong class="note">Note</strong>: 
    <span class="simpara">
     常量和（全局）变量在不同的名字空间中。这意味着例如 <strong><code>TRUE</code></strong> 和 <var class="varname"><var class="varname">$TRUE</var></var> 是不同的。
    </span>
   </p></blockquote>
   <p class="simpara">
    如果使用了一个未定义的常量，PHP
    假定想要的是该常量本身的名字，如同用字符串调用它一样（CONSTANT 对应
    &quot;CONSTANT&quot;）。此时将发出一个 <a href="ref.errorfunc.html" class="link">E_NOTICE</a>
    级的错误。参见手册中为什么
    <a href="language.types.array.html#language.types.array.foo-bar" class="link">$foo[bar]</a>
    是错误的（除非事先用 <span class="function"><a href="function.define.html" class="function">define()</a></span> 将 <em>bar</em>
    定义为一个常量）。如果只想检查是否定义了某常量，用 <span class="function"><a href="function.defined.html" class="function">defined()</a></span> 函数。
   </p>
   <p class="para">
    常量和变量有如下不同：
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       常量前面没有美元符号（<em>$</em>）；
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       常量只能用 <span class="function"><a href="function.define.html" class="function">define()</a></span> 函数定义，而不能通过赋值语句；
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       常量可以不用理会变量的作用域而在任何地方定义和访问；
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       常量一旦定义就不能被重新定义或者取消定义；
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       常量的值只能是标量。
       </span>
     </li>
    </ul>
   </p>

   <p class="para">
    <div class="example" id="example-112">
     <p><strong>Example #1 定义常量</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />define</span><span style="color: #007700">(</span><span style="color: #DD0000">"CONSTANT"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Hello&nbsp;world."</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #0000BB">CONSTANT</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;outputs&nbsp;"Hello&nbsp;world."<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">Constant</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;输出&nbsp;"Constant"&nbsp;并发出一个提示级别错误信息<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
   </p>

   <p class="para">
    <div class="example" id="example-113">
     <p><strong>Example #2 使用关键字 <em>const</em> 定义常量</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;以下代码在&nbsp;PHP&nbsp;5.3.0&nbsp;后可以正常工作<br /></span><span style="color: #007700">const&nbsp;</span><span style="color: #0000BB">CONSTANT&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Hello&nbsp;World'</span><span style="color: #007700">;<br /><br />echo&nbsp;</span><span style="color: #0000BB">CONSTANT</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
   </p>
   
   <blockquote class="note"><p><strong class="note">Note</strong>: 
    <p class="para">
	 和使用 <span class="function"><a href="function.define.html" class="function">define()</a></span> 来定义常量相反的是，使用 <em>const</em>
	 关键字定义常量必须处于最顶端的作用区域，因为用此方法是在编译时定义的。这就意味着不能在函数内，循环内以及
     <em>if</em> 语句之内用 <em>const</em> 来定义常量。
    </p>
   </p></blockquote>

   <p class="simpara">
    参见<a href="language.oop5.constants.html" class="link">类常量</a>。
   </p>
  </div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.constants.html">常量</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.constants.predefined.html">魔术常量</a></div>
 <div class="up"><a href="language.constants.html">常量</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
